# 变量
# 命名规则：大小写字母、数字、_，不能以数字开头，不能是关键字

# 查看Python中的关键字
import keyword

print(keyword.kwlist)

# 定义即赋值
# 定义时不需要指定类型，可以自动推断
a = 1

# 查看类型 使用type函数
print(type(a))

# Python是动态数据类型
a = 1.1
print(type(a))

a = "abc"
print(type(a))

# print 函数
# 打印到控制台

# 打印多个值
print(a, 1, 2, 3, 4, 5, 6, 7)

# 不换行打印
print("hello ", end="")
print("world")

# 注释
# 单行注释
''' 多行注释一般用于文档说明
多行注释
多行注释
多行注释
'''
"""
多行注释
多行注释
多行注释
"""

# 基本数据类型
# 5大：整型 int、浮点 float、字符串 str、布尔 bool、空类型 NoneType
int1 = 10
print(int1, type(int1))

float1 = 10.111
print(float1, type(float1))

# 不严格区分 单双引号 都是 str
# 没有 字符类型
str1 = 'abcdefg'
str2 = "abcdefghijklmn"
str3 = 'a'
print(str1, type(str1))
print(str2, type(str2))
print(str3, type(str3))

# 首字母大写
bool1 = True
bool2 = False
print(bool1, type(bool1))
print(bool2, type(bool2))

none = None
print(none, type(none))

# 类型的转换
# 要转成什么类型就调用对应的 类型方法
# int()、float()、str()、bool()
# 注意要转换的值 必须符合要求
str4 = '123'
# str4 = 'abc'
print(str4, type(str4))
str2int = int(str4)
print(str2int, type(str2int))

str2float = float(str4)
print(str2float, type(str2float))

str2bool = bool(str4)
print(str2bool, type(str2bool))

# 字符串常见的操作
str1 = 'java scala python hadoop hive hbase spark'

print(str1.split(' '))  # 按照指定的分隔符进行切分 返回一个list

# 切片
# [起始位置:结束位置:步长]
# [起始,结束)
# 起始位置默认是第一个字符 结束位置默认最后一个字符 步长默认为1
print(str1[11:17])  # 相当于Java中的substring
print(str1[-30:-24])

# 步长表示 隔几个元素取一次
print(str1[11:17:2])  # pto
print(str1[11:17:3])  # ph
print(str1[11:17:4])  # po

print(str1[11:17:-1])  #
print(str1[16:10:-1])  #

# 倒转字符串
print(str1[::-1])

# 索引
# 注意：索引越界的问题
print(str1[6])
print(str1[-7])  # 负数索引：从右往左数第几个元素

# 查看字符串的长度
print(len(str1))
# \t tab 制表符
# \n 换行符 \r 回车符
str2 = '   \t \n \r java scala python hadoop hive hbase spark  \t \t \n'
print(str2)
print(str2.strip())  # 去除字符串左右两边的隐藏字符

# 格式化字符串
# 4 * 3 = 12
a = 4
b = 3
print(a, '*', b, '=', a * b)

# 定义一个模板
# {} * {} = {}
str_format = '{} * {} = {}'
print(str_format.format(a, b, a * b))

# %d 表示数字
# %s 表示字符串
# %f 表示小数
# %d * %d = %d
print('%d * %d = %d' % (a, b, a * b))

# 控制输出三位小数
f1 = 1.234567
print('%.3f' % f1)

print("*" * 50)

# 算术运算
i = 10
j = 3
print(i + j)
print(i - j)
print(i * j)
print(i / j)
print(i % j)  # 取余
print(i ** j)  # i的j次方
print(10 // 6)  # 对结果向下取整

print(2 ** 3 ** 2)  # 2 的 9 次方
print(10 // 3 // 2)  # 从前往后算

# 逻辑运算
# 与或非 and or not
print(True & True)  # True
print(True and True)  # True
print(True & False)  # False
print(True | False)  # True
print(True or False)  # True
print(True ^ False)  # True
print(not True)  # False
print(not False)  # True